package com.tcm.service;

import com.tcm.entity.Group;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tcm.entity.dto.GroupDto;
import com.tcm.entity.dto.param.GroupCreateParam;
import com.tcm.entity.vo.GroupInfoResp;
import com.tcm.entity.vo.GroupListDto;
import com.tcm.entity.vo.GroupListResp;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
* @author Guqier
* @description 针对表【ts_group(学习小组主表)】的数据库操作Service
* @createDate 2023-09-11 21:18:00
*/
public interface GroupService extends IService<Group> {

    @Transactional
    boolean createGroup(GroupCreateParam param, Long currUserId);

    List<GroupListResp> getGroupList(String account);

    GroupDto getInvitationInfo(String code);

    Map<String, String> getGroupInvitationCode(Long groupId);

    @Transactional
    boolean joinGroup(String code, Long currUserId);

    GroupInfoResp getGroupInfo(Long groupId, String range);

    @Transactional
    boolean removeGroup(Long id, Long currUserId);

    @Transactional
    boolean exitGroup(Long id, Long currUserId);

    @Transactional
    boolean renameGroup(String name, Long id, Long currUserId);

    /**
     * 通过教师账号获取说教班级学生加入的小组列表
     * @param account 教师账号
     * @return 取说教班级学生加入的小组列表
     */
    List<GroupListDto> getGroupListByTeacherAccount(String currAccount, Long currUserId);

    /**
     * 教师获取小组详细信息
     * @param groupId 小组ID
     * @param range 数据查询时间范围
     * @param account 教师账号
     * @return 小组详细信息
     */
    GroupInfoResp getGroupInfoByTeacherAccount(Long groupId, String range, String account);
}
